VICE Manual - 7 Machine-specific features

Go to the first, previous, next, last section, table of contents.

# 7 Machine-specific features

## 7.1 C64/128-specific commands and settings

This section lists the settings and commands that are C64/128 specific and thus are not present in the other emulators.

### 7.1.1 Using cartridge images

Cartridge images are like disk images, but mirror the contents of cartridge ROM images instead of disk images.

X64 and X128 allow you to attach the following kinds of cartridges:

- ``.crt'` images, as used by the CCS64 emulator by Per Håkan Sundell;
- generic raw dumps of 8K and 16K images;
- Action Replay images.
- Atomic Power images.
- Epyx fastload images.
- The Commodore IEEE488 interface cartridge (`http://www.funet.fi/pub/cbm/schematics/cartridges/c64/ieee-488/eprom.bin`)
- Retro Replay images.
- IDE64 interface cartridge. (`http://www.volny.cz/dundera/`)
- Super Snapshot 4 images.
- Super Snapshot 5 images.
- Expert Cartridge images.

Each of these kinds has a specific command in the "Attach a cartridge image" submenu. When you have successfully attached a cartridge image, you should then reset the machine to make sure the cartridge initializes itself. Of course, it is also possible to detach a currently attached cartridge image ("Detach cartridge image").

If you are using a freezer cart like an Action Replay cartridge, you can emulate the cartridge's freeze button with the "Cartridge freeze" command.

Attaching the IEEE488 cartridge automatically enables the IEEE488 interface emulation on the `$DF**` I/O ports.

Attaching the IDE64 cartridge automatically enables the IDE64 interface emulation on the `$DE**` I/O ports.

### 7.1.2 VIC-II settings

These settings control the emulation of the VIC-II (MOS6569) video chip used in both the C64 and the C128.

- "Sprite-sprite collisions" and "Sprite-background collisions", if enabled, cause the hardware detection of sprite-to-sprite and sprite-to-background collisions of the VIC-II to be emulated. This feature is used by many games, and disabling either of the two detection systems can sometimes make you invincible (although there is also a chance that also enemies become invincible then).
- "Color set" can be used to dynamically change the palette file being used by choosing one of the available predefined color sets:
  - ``default.vpl'` ("default"), the default VICE palette;
  - ``c64s.vpl'` ("C64S"), palette taken from the shareware C64S emulator by Miha Peternel.
  - ``ccs64.vpl'` ("CCS64"), palette taken from the shareware CCS64 emulator by Per Håkan Sundell.
  - ``frodo.vpl'` ("Frodo"), palette taken from the free Frodo emulator by Christian Bauer (http://www.uni-mainz.de/~bauec002/FRMain.html).
  - ``pc64.vpl'` ("PC64"), palette taken from the free PC64 emulator by Wolfgang Lorenz.
  - ``godot.vpl'` ("GoDot"), palette as suggested by the authors of the C64 graphics package GoDot (http://users.aol.com/howtogodot/welcome.htm).

#### 7.1.2.1 VIC-II resources

`CheckSsColl`
  Boolean specifying whether the sprite-sprite hardware collision detection must be emulated.
`CheckSbColl`
  Boolean specifying whether the sprite-background hardware collision detection must be emulated.

#### 7.1.2.2 VIC-II command-line options

`-checkss`
`+checkss`
  Enable (`CheckSsColl=1`) and disable (`CheckSsColl=0`) emulation of hardware sprite-sprite collision detection, respectively.
`-checksb`
`+checksb`
  Enable (`CheckSbColl=1`) and disable (`CheckSbColl=0`) emulation of hardware sprite-background collision detection, respectively.

### 7.1.3 SID settings

These settings control the emulation of the SID (MOS6581 or MOS8580) audio chip.

- "Second SID" maps a second SID chip into the address space for stereo sound. This emulates e.g. the "SID Symphony Stereo Cartridge" from Dr. Evil Laboratories. The second SID can be used with software such as "Stereo SID Player" by Mark Dickenson or "The Enhanced Sidplayer" by Craig Chamberlain.
- "Second SID base address" sets the start address for the second SID chip. Software normally uses $DE00 or $DF00, since $DE00-$DEFF and $DF00-$DFFF can be mapped through the cartridge port of the C64. The default start address is $DE00.
- "Emulate filters" causes the built-in programmable filters of the SID chip to be emulated. A lot of C64 music requires them to be emulated properly, but their emulation requires some additional processor power.
- "ChipModel" specifies the model of the SID chip being emulated: there are two slightly different generations of SID chips: MOS6581 ones and MOS8580 ones.
- "Use reSID emulation" specifies whether the more accurate (and resource hungry) reSID emulation is turned on or off.
- "reSID sampling method" selects the method for conversion of the SID output signal to a sampling rate appropriate for playback by standard digital sound equipment. Possible settings are:
  - "Fast" simply clocks the SID chip at the output sampling frequency, picking the nearest sample. This yields acceptable sound quality, but sampling noise is noticeable in some cases, especially with SID combined waveforms. The sound emulation is still cycle exact.
  - "Interpolating" clocks the SID chip each cycle, and calculates each sample with linear interpolation. The sampling noise is now strongly attenuated by the SID external filter (as long as "Emulate filters" is selected), and the linear interpolation further improves the sound quality.
  - "Resampling" clocks the SID chip each cycle, and uses the theoretically correct method for sample generation. This delivers CD quality sound, but is extremely CPU intensive, and is thus most useful for non-interactive sound generation. Unless you have a very fast machine, that is.
- "reSID resampling passband" specifies the percentage of the total bandwidth allocated to the resampling filter passband. The work rate of the resampling filter is inversely proportional to the remaining transition band percentage. This implies that e.g. with the transition band starting at ~ 20kHz, it is faster to generate 48kHz than 44.1kHz samples. For CD quality sound generation at 44.1kHz the passband percentage should be set to 90 (i.e. the transition band starting at almost 20kHz).

#### 7.1.3.1 SID resources

`SidStereo`
  Boolean selecting emulation of a second SID.
`SidStereoAddressStart`
  Integer specifying the start address for the second SID.
`SidFilters`
  Boolean specifying whether the built-in SID filters must be emulated.
`SidModel`
  Integer specifying what model of the SID must be emulated (`0`: MOS6581, `1`: MOS8580).
`SidUseResid`
  Boolean specifying whether the accurate reSID emulation is being used.
`SidResidSampling`
  Integer specifying the sampling method (`0`: Fast, `1`: Interpolation, `2`: Resampling)
`SidResidPassband`
  Integer specifying the resampling filter passband in percentage of the total bandwidth (`0 - 90`).

#### 7.1.3.2 SID command-line options

`-sidstereo`
  Emulates a second SID chip for stereo sound (`SidStereo`).
`-sidstereoaddress `ADDRESS``
  Specifies the start address for the second SID chip (`SidStereoAddressStart`).
`-sidmodel MODEL`
  Specifies `MODEL` as the emulated model of the SID chip (`SidModel`).
`-sidfilters`
`+sidfilters`
  Enable (`SidFilters=1`) or disable (`SidFilters=0`) emulation of the built-in SID filters.
`-resid`
`+resid`
  Enable (`SidFilters=1`) or disable (`SidFilters=0`) usage of the reSID emulator.
`-residsamp `METHOD``
  Specifies the sampling method; fast (`SidResidSampling=0`), interpolating (`SidResidSampling=1`), or resampling (`SidResidSampling=2`).
`-residpass `PERCENTAGE``
  Specifies the resampling filter passband in percentage of the total bandwidth (`SidResidPassband=0-90`).

### 7.1.4 C64 I/O extension settings

There are three I/O extensions available: they are located at the address range $DF00 ... $DFFF and each of them is controlled by a boolean resource. Please use these extensions only when needed, as they might cause compatibility problems.

- The "emulator identification" extension allows programs to identify the kind of emulator they are running on, according to the emulation detection proposal by Wolfgang Lorenz. This basically means that, when some locations in the $DFxx I/O space are read, the emulator returns some values which identify the emulator itself, its version and a copyright message. If this extension is disabled, programs will have virtually no way to realize they are running on an emulator.
- The "512K RAM Expansion Unit" extension emulates a standard 512K Commodore RAM Expansion Unit; this can be used with GEOS and other programs that are designed to take advantage of it. This currently works only in the C64 emulator.
- FIXME

#### 7.1.4.1 C64 I/O extension resources

`IEEE488`
  Boolean specifying whether the IEEE488 interface should be emulated or not.
`REU`
  Boolean specifying whether the 512K RAM Expansion Unit should be emulated or not.
`EmuID`
  Boolean specifying whether the emulation identification extension should be emulated or not.

#### 7.1.4.2 C64 I/O extension command-line options

`-ieee488`
`+ieee488`
  Enable (`IEEE488=1`) or disable (`IEEE488=0`) emulation of the IEEE488 interface.
`-reu`
`+reu`
  Enable (`REU=1`) or disable (`REU=0`) emulation of the 512K RAM Expansion Unit.
`-emuid`
`+emuid`
  Enable (`EmuID=1`) or disable (`EmuID=0`) the emulation identification extension.

### 7.1.5 C64/128 system ROM settings

These settings can be used to control what system ROMs are loaded in the C64/128 emulators at startup. They cannot be changed from the menus.

#### 7.1.5.1 C64/128 system ROM resources

`KernalName`
  String specifying the name of the Kernal ROM (default ``kernal'`).
`BasicName`
  String specifying the name of the Basic ROM (default ``basic'`). In the C128 emulator, the ROM image must actually include the editor ROM too.
`ChargenName`
  String specifying the name of the character generator ROM (default ``chargen'`).
`KernalRev`
  String specifying the Kernal revision. This resource can be used to control what revision of the C64 kernal is being used; it cannot be changed at runtime. VICE is able to automatically convert one ROM revision into another, by manually patching the loaded image. This way, it is possible to use any of the ROM revisions without changing the ROM set. Valid values are:
  `0`
    Kernal revision 0;
  `3`
    Kernal revision 3;
  `sx`
  `67`
    Commodore SX-64 ROM;
  `100`
  `4064`
    Commodore 4064 (also known as "PET64" or "Educator 64") ROM.

#### 7.1.5.2 C64/128 system ROM command-line options

`-kernal NAME`
  Specify ``NAME'` as the Kernal ROM file (`KernalName`).
`-basic NAME`
  Specify ``NAME'` as the Basic ROM file (`BasicName`).
`-chargen NAME`
  Specify ``NAME'` as the character generator ROM file (`ChargenName`).
`-kernalrev REVISION`
  Specify Kernal revision (`KernalRev`).

## 7.2 VIC20-specific commands and settings

This section lists the settings and commands that are VIC20-specific and thus are not present in the other emulators.

### 7.2.1 Using cartridge images

As with the C64 (see section 7.1.1 Using cartridge images), it is possible to attach several types of cartridge images:

- 4 or 8 Kbyte cartridges located at $2000;
- 4 or 8 Kbyte cartridges located at $4000;
- 4 or 8 Kbyte cartridges located at $6000;
- 4 or 8 Kbyte cartridges located at $A000;
- 4 Kbyte cartridges located at $B000.

This can all be done via the "Attach cartridge image..." command in the left-button menu. It is also possible to let XVIC "guess" the type of cartridge using "Smart-attach cartridge image...".

Notice that several cartridges are actually made up of two pieces (and two files), that need to be loaded separately at different addresses. In that case, you have to know the addresses (which are usually specified in the file name) and use the "attach" command twice.

A special kind of cartridge file is where the two files mentioned above are concatenated (with removing the two byte load address of the second image) into one 16k image. There are only few of those images, though. Normally the second part is located at $A000. Vice can now attach such concatenated files at the start address $2000, $4000, and $6000. The second half of such an image is moved to $A000. If you encounter 16k images that have the second half not at $A000 you can split the image into two halfs (i.e. one 8194 byte and one 8192 byte, because the first has the load address) and attach both files separately.

One cartridge that is currently only partially supported here is the VIC1112 IEEE488 interface. You have to load the ROM as a cartridge, but you also have to enable the IEEE488 hardware by menu.

### 7.2.2 Changing memory configuration

It is possible to change the VIC20 memory configuration in two ways: by enabling and/or disabling certain individual memory blocks, or by choosing one among a few typical memory configurations. The former can be done by modifying resource values directly or from the right-button menu; the latter can only be done from the menu.

There are 5 RAM expansion blocks in the VIC20, numbered 0, 1, 2, 3 and 5:

- block 0 (3 Kbytes at $0400-$0FFF);
- block 1 (8 Kbytes at $2000-$3FFF);
- block 2 (8 Kbytes at $4000-$5FFF);
- block 3 (8 Kbytes at $6000-$7FFF);
- block 5 (8 Kbytes at $A000-$BFFF).

These blocks are called expansion blocks because they are not present a stock ("unexpanded") machine. Each of them is associated to a boolean `RamBlockX` resource (where `X` is the block number) that specifies whether the block is enabled or not.

There are also some common memory configurations you can pick from the right-button menu:

- no RAM expansion blocks at all;
- all RAM expansion blocks enabled;
- 3K expansion (only block 0 is enabled);
- 8K expansion (only block 1 is enabled);
- 16K expansion (only blocks 1 and 2 are enabled);
- 24K expansion (only blocks 1, 2 and 3 are enabled).

As with the X64 (see section 7.1.4 C64 I/O extension settings), it is also possible to enable a special emulator identification mechanism that uses certain memory locations to let a running program query information about the emulator itself; this is enabled by the "Emulator identification" option.

#### 7.2.2.1 VIC20 memory configuration resources

`RAMBlock0`
`RAMBlock1`
`RAMBlock2`
`RAMBlock3`
`RAMBlock5`
  Booleans specifying whether RAM blocks 0, 1, 2, 3 and 5 must be enabled.
`EmuID`
  Boolean specifying whether the emulation identification extension must be enabled.

#### 7.2.2.2 VIC20 memory configuration command-line options

`-memory CONFIG`
  Specify memory configuration. It must be a comma-separated list of options, each of which can be one the following:
  - `none` (no extension);
  - `all` (all blocks);
  - `3k` (3k space in block 0);
  - `8k` (first 8k extension block);
  - `16k` (first and second 8k extension blocks);
  - `24k` (first, second and 3rd extension blocks);
  - `0`, `1`, `2`, `3`, `5` (memory in respective blocks);
  - `04`, `20`, `40`, `60`, `A0` (memory at respective address.
  For example,

      xvic -memory none

  gives an unexpanded VIC20. While

      xvic -memory 60,a0

  or

      xvic -memory 3,5

  enables memory in blocks 3 and 5, which is the usual configuration for 16k ROM modules.
`-emuid`
`+emuid`
  Enable (`EmuID=1`) or disable (`EmuID=0`) the emulation identification extension.

### 7.2.3 VIC20 system ROM settings

These settings can be used to control what system ROMs are loaded in the VIC20 emulator at startup. They cannot be changed from the menus.

#### 7.2.3.1 VIC20 system ROM resources

`KernalName`
  String specifying the name of the Kernal ROM (default ``kernal'`).
`BasicName`
  String specifying the name of the Basic ROM (default ``basic'`).
`ChargenName`
  String specifying the name of the character generator ROM (default ``chargen'`).
`CartridgeFile2000`
`CartridgeFile4000`
`CartridgeFile6000`
`CartridgeFileA000`
`CartridgeFileB000`
  String specifying the name of the respective cartridge ROM images.

#### 7.2.3.2 VIC20 system ROM command-line options

`-kernal NAME`
  Specify ``NAME'` as the Kernal ROM file (`KernalName`).
`-basic NAME`
  Specify ``NAME'` as the Basic ROM file (`BasicName`).
`-chargen NAME`
  Specify ``NAME'` as the character generator ROM file (`ChargenName`).
`-cart2 NAME`
`-cart4 NAME`
`-cart6 NAME`
`-cartA NAME`
`-cartB NAME`
  Specify ``NAME'` as the cartridge image to attach. (`CartridgeFile2000`,...,`CartridgeFileB000`).

## 7.3 PET-specific commands and settings

This section lists the settings and commands that are PET-specific and thus are not present in the other emulators.

### 7.3.1 Changing PET model settings

With `xpet`, it is possible to change at runtime the characteristics of the emulated PET so that it matches (or not) the ones of a certain PET model, and it is also possible to select from a common set of PET models so that all the features are selected accordingly.

The former is done by changing the following resources (via resource file, command line options or right-menu items):

`RamSize`
  Size of memory in kByte. 96k denotes a 8096, 128k a 8296.
`IOSize`
  Size of I/O area in Byte. Either 2048 or 256 for 8296.
`Crtc`
  Enables CRTC 6545 emulation (all models from 40xx and above)
`VideoSize`
  The number of columns on the screen (40 or 80). A 0 auto-detects this from the ROM.
`Ram9`
  The 8296 can map RAM into the address range $9***
`RamA`
  The 8296 can map RAM into the address range $A***
`SuperPET`
  This resource enables the SuperPET (MicroMainFrame 9000) I/O and disables the 8x96 mappings.
`Basic1`
  If (by checksum) a version 1 kernal is detected, then the kernal ROM is patched to make the IEEE488 interface work.
`Basic1Chars`
  Exchanges some character in the character ROM that have changed between the first PET 2001 and all newer versions.
`EoiBlank`
  This resource enables the "blank screen on EOI" feature of the oldest PET 2001.
`EmuID`
  Enable emulator ID (at `$e8a0-$e8ff`, for use see C64).
`DiagPin`
  Set the diagnositc pin on the PET userport (see below).
`ChargenName`
  Specify ``NAME'` as the character generator ROM file
`KernalName`
  Specify ``NAME'` as the kernal ROM file. This file contains the complete BASIC, EDITOR and KERNAL ROMs and is either 16k (BASIC 1 and 2) or 20k (BASIC 4) in size.
`EditorName`
  Specify ``NAME'` as the editor ROM file. This file contains an overlay for the editor ROM at $E000-$E7FF if necessary.
`RomModule9Name`
  Specify ``NAME'` as the $9*** Expansion ROM file. This file contains an expansion ROM image of 4k.
`RomModuleAName`
  Specify ``NAME'` as the $A*** Expansion ROM file. This file contains an expansion ROM image of 4k.
`RomModuleBName`
  Specify ``NAME'` as the $B*** Expansion ROM file. This file contains an expansion ROM image of 4k. This file overlays the lowest 4k of a BASIC 4 ROM.

Choosing a common PET model is done from the right-button menu instead, by choosing an item from the "Model defaults" submenu. Available models are:

- PET 2001-8N
- PET 3008
- PET 3016
- PET 3032
- PET 3032B
- PET 4016
- PET 4032
- PET 4032B
- PET 8032
- PET 8096
- PET 8296
- SuperPET

Notice that this will reset the emulated machine.

It is also possible to select the PET model at startup, with the `-model` command-line option: for example, ``xpet -model 3032'` will emulate a PET 3032 while ``xpet -model 8296'` will emulate a PET 8296.

### 7.3.2 The PET diagnostic pin

It is possible to enable or disable emulation of the PET diagnostic pin via the `DiagPin` resource, or the "PET userport diagnostic pin" item in the right-button menu.

When the diagnostic pin is set, the Kernal does not try to initialize the BASIC, but directly jumps into the builtin machine monitor.

### 7.3.3 PET command line options

These are the commandline options specific for the CBM-II models.

`-model MODEL`
  Specify the PET model you want to emulate.
`-kernal NAME`
  Specify ``NAME'` as the Kernal/BASIC ROM file (`KernalName`).
`-editor NAME`
  Specify ``NAME'` as the editor ROM file (`EditorName`).
`-chargen NAME`
  Specify ``NAME'` as the character generator ROM file (`ChargenName`).
`-rom9 NAME, -romA NAME, -romB NAME`
  Specify ``NAME'` as the ROM image file for the respective cartridge areas (`RomModule9Name`, `RomModuleAName`, `RomModuleBName`).
`-petramA, -petramB`
  Switch on RAM mapping on addresses $9000-$9fff, $a000-$afff (`Ram9`, `RamA`).
`-superpet, +superpet`
  Enable/Disable SuperPET I/O emulation (`SuperPET`).
`-basic1, +basic1`
  Enable/Disable patching the IEEE488 section of the PET2001 ROM when detected (`Basic1`).
`-basic1char, +basic1char`
  Enable/Disable PET 2001 character generator (`Basic1Chars`).
`-eoiblank, +eoiblank`
  Enable/Disable EOI blanking the screen (`EoiBlank`).
`-emuid`
`+emuid`
  Enable (`EmuID=1`) or disable (`EmuID=0`) the emulation identification extension (at `$e8a0-$e8ff`).
`-diagpin`
`+diagpin`
  Enable (`DiagPin=1`) or disable (`DiagPin=0`) the diagnostic pin at the PET userport.

### 7.3.4 Changing screen colors

It is also possible to choose what color set is used for the emulation window. This is done by specifying a palette file name (see section 4.3 Palette files) in the `PaletteName` resource. The menu provides the following values:

- `green.vpl` (default, "green)"), the good old green-on-black feeling;
- `amber.vpl` ("amber"), an amber phosphor lookalike;
- `white.vpl` ("white"), simple white-on-black palette.

## 7.4 CBM-II-specific commands and settings

This section lists the settings and commands that are CBM-II-specific and thus are not present in the other emulators.

### 7.4.1 Changing CBM-II model

With `xcbm2`, it is possible to change at runtime the characteristics of the emulated CBM so that it matches (or not) the ones of a certain CBM model, and it is also possible to select from a common set of CBM models so that all the features are selected accordingly.

The former is done by changing the following resources (via resource file, command line options or right-menu items):

`UseVicII`
  Whether to use VIC-II for video output (value 1) or the CRTC for the other machines (value 0)
`RamSize`
  Size of memory in kByte. Possible values are 128, 256, 512 and 1024
`Ram08, Ram1, Ram2, Ram4, Ram6, RamC`
  Expanded CBM-II models could map RAM to the expansion ROM areas at $0800-$0fff, $1000-$1fff, $2000-$3FFF, $4000-$5FFF, $6000-$7FFF and $c000-$cfff respectively.
`Cart2Name, Cart4Name, Cart6Name`
  Specify ``NAME'` as the $2000-$3FFF, $4000-$5FFF or $6000-$6FFF Expansion ROM file. This file contains an 8k ROM dump.
`ModelLine`
  The CBM-II business models have two hardcoded lines at one of the I/O ports. From those lines the kernal determines how it should init the CRTC video chip for either 50Hz (Europe) or 60Hz (North America), and either for 8 (C6x0) or 14 (C7x0) scanlines per character. 0 = CBM 7x0 (50Hz), 1 = 60Hz C6x0, 2 = 50Hz C6x0).

Choosing a common CBM-II model is done from the right-button menu instead, by choosing an item from the "Model defaults" submenu. Available models are:

- C510 (128k RAM)
- C610 (128k RAM)
- C620 (256k RAM)
- C620+ (1024k RAM, expanded)
- C710 (128k RAM)
- C720 (256k RAM)
- C720+ (1024k RAM, expanded)

Notice that this will reset the emulated machine.

Warning: At this time switching between 510 and other machines during runtime is not supported and will not work.

It is also possible to select the CBM model at startup, with the `-model` command-line option: for example, ``xcbm2 -model 610'` will emulate a CBM 610 while ``xcbm2 -model 620'` will emulate a CBM 620. Notably this is the only way to start a C510 emulation, with `-model 510`.

### 7.4.2 CBM-II command line options

These are the commandline options specific for the CBM-II models.

`-usevicii`
`+usevicii`
  Specify whether to use (-usevicii) or not to use (+usevicii) the VIC-II emulation.
`-kernal NAME`
  Specify ``NAME'` as the Kernal ROM file (`KernalName`).
`-basic NAME`
  Specify ``NAME'` as the Basic ROM file (`BasicName`).
`-chargen NAME`
  Specify ``NAME'` as the character generator ROM file (`ChargenName`).
`-cart2 NAME, -cart4 NAME, -cart6 NAME`
  Specify ``NAME'` as the ROM image file for the respective cartridge areas (`Cart2Name`, `Cart4Name`, `Cart6Name`).
`-ram08, -ram1, -ram2, -ram4, -ram6, -ramC`
  Switch on RAM mapping in bank 15 on addresses $0800-$0fff, $1000-$1fff, $2000-$3fff, $4000-$5fff, $6000-$7fff resp (`Ram08`, `Ram1`, `Ram2`, `Ram4`, `Ram6`, `RamC`).
`-modelline`
  Define the hardcoded model switch in the CBM-II models.

### 7.4.3 Changing screen colors

It is also possible to choose what color set is used for the emulation window. This is done by specifying a palette file name (see section 4.3 Palette files) in the `PaletteName` resource. The menu provides the following values:

- `green.vpl` (default, "green"), the good old green-on-black feeling;
- `amber.vpl` ("amber"), an amber phosphor lookalike;
- `white.vpl` ("white"), simple white-on-black palette.

Go to the first, previous, next, last section, table of contents.